#ifndef TAREFA_GERENCIADOR_H
#define TAREFA_GERENCIADOR_H

#include "util/singleton.h"

#include <list>

using namespace std;

#define GT ::tarefa::gerenciador::getInstancia()

namespace tarefa {
class tarefa;

/**
* \brief Parte principal do sistema.
* Parte principal do sistema, roda as tarefas cadastradas sequencialmente.
*
* @author Daniel Fleischman
* @date 29/01/2008
*/
class gerenciador {
  SINGLETON(gerenciador) {};
  public:
  virtual ~gerenciador();
  /**
    * Cadastra uma nova tarefa no fim da lista do gerenciador.
    * @param _t Tarefa a ser adicionada a lista.
    */ 
  void cadastra(tarefa* _t);
  /**
    * Executa as tarefas sequencialmente, ate que todas tenham sido
    * executadas, ou ate que tenha se atingido o limite de tempo.
    * @param tempo se for diferente de -1, sera um limite (em ms)
    * para o tempo de execucao de roda.
    */
  void roda(int tempo = -1);
  private:
  list<tarefa*> lista_;
};
}
#endif
